#include <iostream>
#include <forward_list>
#include <vector>
using namespace std;
int main() {
    forward_list<int> a;
    vector<int> b = {9,8,7,6};
    // 单链表赋值
    a.assign({1,2,3,4});
    // 链表头插入元素3
    a.emplace_front(3);
    // 获取链表长度
    cout<<distance(a.begin(),a.end())<<endl;
    auto it = a.begin();
    // 在链表的开始迭代器指定的位置后面插入元素5
    it = a.emplace_after(it,5);
    // 在插入元素后面插入9
    a.emplace_after(it,9);
    // 在链表头插入1
    a.emplace_front(1);//1 3 5 9 1 2 3 4
    if(a.empty())
        cout<<"链表为空！"<<endl;
    else
        cout<<"链表非空"<<endl;
    // 删除链表第二个元素
    it = a.begin();
    it = a.erase_after(it);//1 5 9 1 2 3 4(迭代器前进)
    // 删除3 4
    it = a.erase_after(it,a.end());//1 5
    int first_elem = a.front();//获取链表第一个元素
    // 第一个元素之后插入2
    it = a.begin();
    it = a.insert_after(it,2);//1 2 5

    // 2后面插入2个20
    it = a.insert_after(it,2,20);// 1 2 20 20 5
    // 迭代器20后插入vector元素
    it = a.insert_after(it,b.begin(),b.end());

    // 获取链表最大长度
    cout<<a.max_size()<<endl;
    // resize 链表长度存储元素为10,最大长度不变
    a.resize(10);
    cout<<a.max_size()<<endl;
    forward_list<int> c = {9,10,11,12};
    // 按照原有顺序融合链表
    a.merge(c);//1 2 9 10 11 12 20 20 9 8 7 6 5 0
    // 删除第一个元素
    a.pop_front();//2 9 10 11 12 20 20 9 8 7 6 5 0
    // 链表前添加元素9
    a.push_front(9);//9 2 9 10 11 12 20 20 9 8 7 6 5 0
    // 删除元素9(所有元素为9的)
    a.remove(9);//2 10 11 12 20 20 9 8 7 6 5 0
    // resize为长度为6
    a.resize(6);//2 10 11 12 20 20
    // resize 为4同时多的元素初始化为5
    a.resize(7,5);//2 10 11 12 20 20 5
    // 反转链表
    a.reverse();//5 20 20 12 11 10 2
    // 对链表排序,默认从小到大
    a.sort();//2 5 10 11 12 20 20
    // 从大到小排序
    a.sort(greater<int>());//20 20 12 11 10 5 2

    forward_list<int> d = {4,5,5,6,7};
    //交换链表元素
    a.swap(d);//4 5 5 6 7
    // 链表去重
    a.unique();//4 5 6 7
    // 清空链表
    a.clear();
    for(auto iter=a.begin();iter!=a.end();iter++){
        int tem = *iter;
        cout<<*iter<<" ";
    }
    return 0;
}